const express = require('express');
const router = express.Router();
const Activities = require('../../models/activities/activities');
const { Op } = require('sequelize');

// 更新活动信息
router.put('/updateActivities/:id', async (req, res) => {
  try {
    const activityId = req.params.id;
    const {
      title,
      type,
      description,
      location,
      start_time,
      end_time,
      signup_deadline,
      max_participants,
      points
    } = req.body;

    // 检查活动是否存在
    const existingActivity = await Activities.findByPk(activityId);
    if (!existingActivity) {
      return res.status(404).json({
        success: false,
        message: '活动不存在'
      });
    }

    // 验证时间逻辑（如果提供了时间字段）
    if (start_time || end_time || signup_deadline) {
      const now = new Date();
      const startTime = start_time ? new Date(start_time) : new Date(existingActivity.start_time);
      const endTime = end_time ? new Date(end_time) : new Date(existingActivity.end_time);
      const deadline = signup_deadline ? new Date(signup_deadline) : new Date(existingActivity.signup_deadline);

      // 如果活动已经开始，不允许修改时间
      if (new Date(existingActivity.start_time) <= now) {
        return res.status(400).json({
          success: false,
          message: '活动已经开始，无法修改时间'
        });
      }

      if (startTime <= now) {
        return res.status(400).json({
          success: false,
          message: '活动开始时间必须晚于当前时间'
        });
      }

      if (endTime <= startTime) {
        return res.status(400).json({
          success: false,
          message: '活动结束时间必须晚于开始时间'
        });
      }

      if (deadline >= startTime) {
        return res.status(400).json({
          success: false,
          message: '报名截止时间必须早于活动开始时间'
        });
      }
    }

    // 验证人数限制
    if (max_participants !== undefined) {
      if (max_participants <= 0) {
        return res.status(400).json({
          success: false,
          message: '最大参与人数必须大于0'
        });
      }
      // 如果设置了人数限制，检查是否小于当前报名人数
      const currentParticipants = await Activities.count({
        where: {
          id: activityId,
          // 这里需要关联报名表来获取实际报名人数
          // 暂时注释掉，需要根据实际的报名表结构来实现
          // '$participants.id$': { [Op.ne]: null }
        }
      });
      if (max_participants < currentParticipants) {
        return res.status(400).json({
          success: false,
          message: '最大参与人数不能小于当前报名人数'
        });
      }
    }

    // 验证积分
    if (points !== undefined && points < 0) {
      return res.status(400).json({
        success: false,
        message: '积分不能为负数'
      });
    }

    // 更新活动信息
    const updateData = {
      ...(title && { title }),
      ...(type && { type }),
      ...(description && { description }),
      ...(location && { location }),
      ...(start_time && { start_time }),
      ...(end_time && { end_time }),
      ...(signup_deadline && { signup_deadline }),
      ...(max_participants && { max_participants }),
      ...(points !== undefined && { points })
    };

    await Activities.update(updateData, {
      where: { id: activityId }
    });

    // 获取更新后的活动信息
    const updatedActivity = await Activities.findByPk(activityId);

    res.json({
      success: true,
      message: '活动更新成功',
      data: updatedActivity
    });

  } catch (error) {
    console.error('更新活动失败:', error);
    res.status(500).json({
      success: false,
      message: '更新活动失败',
      error: error.message
    });
  }
});

module.exports = router;
